/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package oop;

/**
 *
 * @author anh_yeu_em_nhieu_lam
 */    
/*
 * Lớp trùng tên file là top_level class thì không
 * được khởi tạo với từ khóa static
 **/

/*
 * Một Anonymous class thì không thể được
 * khởi tạo với từ khóa static
 * */
public class StaticClassBasicOne { 
    /*
     * Khi một member class được khởi tạo với từ khóa static
     * thì nó chở thành một Nested top-level class.Một nested 
     * top-level class thì chỉ như các top-level class khác
     * ngoại trừ là nó được khởi tạo bên trong một class hoặc một
     * interface . Các nested top-level class thì điển hình được
     * sử dụng để nhóm các class liên quan mà không cần tạo một
     * package mới
     * */
    public static class MemberClassExample{
        /*
         * Các member không nhất thiết phải là static 
         * (C# bắt buộc các member phải là static)
         * */
        public int _testone = 10;
        public static int _testtwo = 20;
        public MemberClassExample() {
            //Được phép có hàm contructor (C# không được phép)
        }
        
    }
    public void MethodTest(){
        /*
         * Một local class thì không được phép cho phép khởi tạo
         * với các từ khóa public , private , protected hay static
         * */
        class LocalClassExample{

        }
    }
    public class MemberClassNoStatic{
        
    }
        
    public static void main(String arg[]){        
        System.out.print(MemberClassExample._testtwo);
        /*
         * Để sử dụng các member không phải static trong
         * lớp tĩnh vẫn phải khởi tạo đối tượng , nhưng có thể
         * khởi tạo đối tượng nhưng không cần phải dẫn từ lớp đến nó
         * Ví dụ :
         * Để khởi tạo đối tượng MemberClassNoStatic thì ta phải :
         * */
        new StaticClassBasicOne().new MemberClassNoStatic();
        /*
         * Còn với class static thì chỉ việc :
         * new MemberClassExample()
         * */
        System.out.print(new MemberClassExample()._testone);
    }
}
//Inner class mà không phải member của class nào thì tương tự như 
//local class , không thể khởi tạo với các từ khóa public , private , protected
//hay static
class InnerOutMainClass{
    
}
/*
2010
 * */